1
从玩具数据集到真实世界的混乱
EvoClass-AI002第5讲
00:00

1. 搭建桥梁:数据加载基础

深度学习模型依赖于干净、一致的数据,但现实世界中的数据集本质上是杂乱无章的。我们必须从预打包的基准测试(如MNIST)转向管理非结构化数据源,在这些场景中,数据加载本身就是一个复杂的协调任务。这一过程的基础在于PyTorch为数据管理提供的专业工具。

核心挑战在于将存储在磁盘上的原始、分散的数据(图像、文本、音频文件)转化为高度组织化、标准化的PyTorch 张量格式GPU所期望的格式。这需要自定义逻辑来完成索引、加载、预处理,最终实现批处理。

真实世界数据的关键挑战

  • 数据混乱: 数据分散在多个目录中,通常仅通过CSV文件进行索引。
  • 需要预处理: 图像可能需要在转换为张量之前进行缩放、归一化或增强处理。
  • 效率目标: 数据必须以优化的、非阻塞的批次形式传送到GPU,以最大化训练速度。
PyTorch的解决方案:职责分离
PyTorch强制实施关注点分离:Dataset 负责“做什么”(如何访问单个样本和标签),而DataLoader 则负责“怎么做”(高效批处理、打乱顺序以及多线程交付)。
data_pipeline.py
终端bash — data-env
> 准备就绪。点击“运行”以执行。
>
张量检查器实时

运行代码以检查活跃的张量
问题 1
PyTorch Dataset对象的主要作用是什么?
将样本组织成小批次并进行打乱。
定义获取单个预处理样本的逻辑。
在模型内部执行矩阵乘法。
问题 2
哪个 DataLoader参数可以使用多个CPU核心实现并行数据加载?
device_transfer
batch_size
num_workers
async_load
问题 3
如果您的原始图像尺寸各不相同,哪个组件主要负责将它们调整为统一尺寸(例如,$224 \times 224$)?
DataLoader的 collate_fn
GPU专用的图像处理器。
在Dataset的 __getitem__方法中应用的转换函数。
挑战:自定义图像加载器蓝图
定义用于真实世界图像分类所需的结构。
你正在构建一个 CustomDataset,用于由包含路径和标签的单个CSV文件索引的10,000张图像。
步骤 1
哪个必选方法必须返回样本总数?
解答:
__len__方法中应用的转换函数。
概念:定义了每个周期的大小。
步骤 2
__getitem__(self, index)中,正确的操作顺序是什么?
解答:
1. 使用 index
2. 加载原始数据(例如,图像)。
3. 应用必要的 transforms
4. 返回处理后的张量和标签。